package com.crm.service.productManager;

import com.crm.model.entity.productManager.CustomerMemberProduct;
import com.crm.model.qo.productManager.CustomerMemberProductEditQO;
import com.crm.model.vo.productManager.CustomerProductDetailVO;
import com.crm.model.vo.productManager.ProductVO;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * @author yincuimei
 * @Date 2021/4/12 15:45
 * 产品管理--会员产品
 */
public interface CustomerMemberProductDbService {

    /**
     * 产品管理--会员产品列表
     * @param productStatus  ---产品停、启用状态
     * @param memberCardName ---会员卡名称
     * @param sysType       ---系统类型(用户-user/管理-management)
     * @param order         ---排序
     * @author yincuimei
     */
    List<CustomerMemberProduct> selectCustomerProductList(String productStatus,String memberCardName,String sysType,String order);

    /**
     * 产品管理--新增会员产品
     * @param customerMemberProduct  ---会员产品信息
     * @author yincuimei
     * @return
     */
    Boolean insertCustomerMemberProduct(CustomerMemberProduct customerMemberProduct);

    /**
     * 新增会员产品--查询会员卡名称是否存在
     * @param memberCodeName  ---会员卡名称
     * @param deleteStatus    ---删除状态:0-正常;1-已删除
     * @return
     * @author yincuimei
     */
    Boolean isExistMemberCardName(String memberCodeName,short deleteStatus);

    /**
     * 新增会员产品--查询会员产品编码是否存在
     * @param memberProductCode  ---会员产品编码
     * @param deleteStatus       ---删除状态:0-正常;1-已删除
     * @return
     * @author yincuimei
     */
    Boolean isExistMemberProductCode(String memberProductCode,short deleteStatus);

    /**
     * 会员产品列表--会员卡产品停、启用操作
     * @param customerMemberProduct ---会员产品信息
     * @return
     * @author yincuimei
     */
    Boolean updateProductStatusById(CustomerMemberProduct customerMemberProduct);

    /**
     * 根据产品id查看产品明细
     * @param memberProductId
     * @return
     */
    List<CustomerProductDetailVO> queryCustomerProductDetailInfo(String memberProductId);




    /**
     * 根据产品id修改产品销售价格
     * @param memberEditQO
     * @return
     */
    boolean updateCardPrice(CustomerMemberProductEditQO memberEditQO);

    /**
     * 新增合同--会员产品列表
     * @param productName  ---产品名称
     * @return
     * @author yincuimei
     */
    List<CustomerMemberProduct> selectContractMemberProductList(String productName,String whetherRenew,String upgrade);

    /***
     * @Description:根据会员产品id查询会员产品信息
     * @Param:memberProductId 会员产品id
     * @Author: luojie
     * @Date: 2021/5/8 13:55
     */
    CustomerMemberProduct selectMemberProductById(String memberProductId);

    /**
     * 根据会员卡名称或者会员产品编码查询会员产品信息
     * @Author pym
     * @Date  2021/6/3 15:48
     * @param memberCodeName 会员卡名称
     * @param memberProductCode 会员产品编码
     * @return {@link {com.crm.model.entity.productManager.CustomerMemberProduct}}
     */
    CustomerMemberProduct selectMemberProductByNameOrCode(String memberCodeName, String memberProductCode);

    /**
     * 通过产品编码和删除状态查询会员卡信息
     * @param productCode 产品编码
     * @param parseShort 删除状态
     * @return
     */
    CustomerMemberProduct queryMemberProductCode(String productCode, short parseShort);

    /**
     * 新增商机--会员产品列表
     * @return
     * @author baijian
     */
    List<CustomerMemberProduct> selectSjCustomerMemberProductVOList(String productStatus, String memberCardName, String toString,String tag);

    /**
     * 根据产品类型和id查询产品业绩换算比例
     * @param productCategories
     * @param productId
     * @return
     */
    BigDecimal selectProductPerformanceRatio(String productCategories, String productId);

    /**
     * 根据idList查询会员产品名称
     * @param memberProductIdList
     * @return
     */
    List<Map<String,String>> selectMemberProductByIdList(List<Map<String,String>> memberProductIdList);

    /**
     * 查询所有【启用状态】的会员卡名称
     * @author yincuimei
     * @return
     */
    List<String> selectMemberCardNameByProductStatus();

    /**
     * 查询会员上架产品
     * @Author pym
     * @Date  2021/12/29 16:55
     * @param
     * @return {@link {java.util.List<com.crm.model.vo.productManager.ProductVO>}}
     */
    List<ProductVO> selectMemberShelfProductList();
}
